python

您所在的位置:网站首页 none-utf-8 code starting with python

python

2024-07-12 09:28| 来源: 网络整理| 查看: 265

文章目录 问题解释原因

问题

这句出错的含义是使用utf-8格式无法对你写的代码进行解码,也就无法编译了。 解决方法是告诉编译器使用其他可以用的解码方式来正确解码 怎么告诉它?

解释

好比是这样的,你写了一个uft-8格式的代码,然后计算机用二进制读取到了内存中,python解释器用utf-8格式对这些二进制文件重新解释和编码来执行,但是如果python解释器错误的使用了其他解码格式比如gbk等等,字节按照不同格式读取的结果是不同的,一些代码就会解码错误,python解释器就会懵逼报错

在代码第一行添加一个解码方式注释就好了 只能是第一行,前面可以有注释不能有代码, 因为指定了,解码器就使用指定解码方法;不算注释,如果第一行不指定解码方法解码器就会使用默认方法解码代码,写在代码后面它不承认 解码器解码的时候如果看到了这行注释就会使用注释的编码方式解码,没看到就使用默认方式

# coding=gbk

不仅是gbk,还可以是其他的如iso等等解码方式 java也会出现这种解码方式错误的问题 解决方法是

javac -encoding utf-8 Test.java 原因

那么为什么会发生这种情况呢? 首先理解python执行代码的三个过程

用二进制读取代码文件进内存将内存中的二进制文件解码为python代码执行得到的python代码 问题出在第二步上,如果文件是gbk格式,你使用iso等方式解码就会解码错误,得不到正确代码,当然也无法执行第三步

第二步中,python解释器会先读取前两行文件内容(读到二进制的换行符号就是一行)((二进制中为0x0A或0x0D0A或单独的0x0D)),然后用默认的编码方式对其进行解码,之后会用正则表达式coding[:=]\s*([-\w.]+)进行匹配查找代码指定的解码方式,再用找到的正则表达式的第一个分组作为编码方式对源码文件的二进制内容进行解码,得到python语句,如果没有指定就用默认解码方式解码,那样就未必解码正确。

详细的解释看: https://blog.csdn.net/xuejianbest/article/details/100660402?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&dist_request_id=7b392762-5fdc-40fc-b0f4-895ea74b9e29&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3